home *** CD-ROM | disk | FTP | other *** search
/ Software Vault: The Gold Collection / Software Vault - The Gold Collection (American Databankers) (1993).ISO / cdr26 / netprog.zip / NETPROG.TAR / record / main3.c < prev    next >
C/C++ Source or Header  |  1989-12-17  |  1KB  |  44 lines

  1. /*
  2.  * Recording process, third try: use pseudo-terminals,
  3.  * copying the mode of the pty slave from the tty on stdin.
  4.  * We also set the mode of the tty on stdin to raw.
  5.  */
  6.  
  7. main(argc, argv, envp)
  8. int    argc;
  9. char    **argv;
  10. char    **envp;
  11. {
  12.     int    master_fd, slave_fd, childpid;
  13.  
  14.     if (!isatty(0) || !isatty(1))
  15.         err_quit("stdin and stdout must be a terminal");
  16.  
  17.     if ( (master_fd = pty_master()) < 0)
  18.         err_sys("can't open master pty");
  19.     if (tty_getmode(0) < 0)
  20.         err_sys("can't get tty mode of standard input");
  21.  
  22.     if ( (childpid = fork()) < 0)
  23.         err_sys("can't fork");
  24.     else if (childpid == 0) {    /* child process */
  25.         if ( (slave_fd = pty_slave(master_fd)) < 0)
  26.             err_sys("can't open pty slave");
  27.         close(master_fd);
  28.         if (tty_setmode(slave_fd) < 0)
  29.             err_sys("can't set tty mode of pty slave");
  30.  
  31.         exec_shell(slave_fd, argv, envp);
  32.             /* NOTREACHED */
  33.     }
  34.  
  35.     if (tty_raw(0) < 0)            /* set stdin tty to raw mode */
  36.         err_sys("tty_raw error");
  37.  
  38.     pass_all(master_fd, childpid);
  39.  
  40.     if (tty_reset(0) < 0)            /* reset stdin mode */
  41.         err_sys("tty_reset error");
  42.     exit(0);
  43. }
  44.